package com.itsxb.configure;

import cn.dev33.satoken.stp.StpInterface;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;

import java.util.ArrayList;
import java.util.List;


public class StpInterfaceImpl implements StpInterface {
    /**
     * 这里是不同自动装配 因为是
     */
    private RedisTemplate redisTemplate;

    @Value("${sa-token.permission-template}")
    private String permissionTemplate;

    public StpInterfaceImpl(RedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    /**
     * 返回一个账号所拥有的权限码集合
     * 方式一：使用uaa微服务下的mapper接口去数据中查找对应的权限码 这种方式使得saToken这个包的使用范围
     */
    @Override
    public List<String> getPermissionList(Object loginId, String loginType) {
        String format = String.format(permissionTemplate, loginId);
        Object permissionCodeObj = redisTemplate.opsForValue().get(format);
        if (ObjectUtils.isEmpty(permissionCodeObj)) {
            return new ArrayList<>();
        }
        List<String> permissionCodes = JSONObject.parseArray(JSONObject.toJSONString(permissionCodeObj), String.class);
        return permissionCodes;
    }

    /**
     * 返回一个账号所拥有的角色标识集合 (权限与角色可分开校验) 我们使用的权限码
     */
    @Override
    public List<String> getRoleList(Object loginId, String loginType) {
        // 本 list 仅做模拟，实际项目中要根据具体业务逻辑来查询角色
        return new ArrayList<String>();
    }

}

